package com.bot.nft.module.dc.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bot.nft.module.dc.domain.DcNftInfo;
import com.bot.nft.module.dc.domain.bo.DcNftInfoBo;
import com.bot.nft.module.dc.domain.vo.DcNftInfoVo;
import com.bot.nft.module.dc.domain.vo.NftDictVo;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author RenXiaoZheng
 * @since 2024-01-24
 */
public interface IDcNftInfoService extends IService<DcNftInfo> {

    /**
     * 添加藏品信息
     *
     * @param dcNftInfoBo 藏品信息，包含藏品名称、藏品价格、藏品描述等属性
     * @return Boolean 成功/true，失败/false
     */
    Boolean addDcNftInfo(DcNftInfoBo dcNftInfoBo);

    /**
     * 发售藏品
     *
     * @param id 藏品标识
     * @return Boolean 成功/true，失败/false
     */
    Boolean saleDcNftInfo(String id);

    Boolean saleDcNft(String id);

    /**
     * 修改藏品
     *
     * @param dcNftInfoBo 藏品信息，包含藏品标识、藏品名称、藏品价格、藏品描述等属性
     * @return Boolean 成功/true，失败/false
     */
    Boolean updateDcNftInfo(DcNftInfoBo dcNftInfoBo);

    /**
     * 查看藏品
     *
     * @param id 藏品标识
     * @return dcNftInfoBo 藏品信息，包含藏品名称、藏品价格、藏品描述等属性
     */
    DcNftInfoVo getDcNftInfo(String id);

    /**
     * 删除藏品
     *
     * @param id 藏品标识 根据藏品标识删除藏品信息
     * @return Boolean 成功/true，失败/false
     */
    Boolean delDcNftInfo(String id);

    /**
     * 下架藏品
     *
     * @param id 藏品标识 根据藏品标识下架藏品信息
     * @return Boolean 成功/true，失败/false
     */
    Boolean belowDcNftInfo(String id);

    /**
     * 上架藏品
     *
     * @param id 藏品标识 根据藏品标识上架藏品信息
     * @return Boolean 成功/true，失败/false
     */
    Boolean showDcNftInfo(String id, Integer num);

    /**
     * 查询字典
     *
     * @param type
     * @return
     */
    List<NftDictVo> showDict(String type);

    /**
     * 查询藏品
     *
     * @param type
     * @param keyword  藏品名称关键字
     * @param status   状态
     * @param pageNo   当前第几页
     * @param pageSize 每页显示多少条数据
     * @return PageInfo<DcNftInfoBo *> 分页信息和藏品信息集合
     */
    IPage<DcNftInfoVo> queryDcNftInfo(String type, String keyword, Integer status, Integer pageNo, Integer pageSize, Integer show);

    /**
     * 查询藏品发售时间
     *
     * @return
     */
    List<DcNftInfo> selectNftTime();

    /**
     * 藏品上链
     */
    Boolean updataNftContract(String id, String contract);

}
